﻿package mortal.game.utils
{
    import com.fyGame.utils.*;
    import com.gengine.utils.*;

    public class DescUtil extends Object
    {
        private static var reg:RegExp = /\{([^{}]*)\}""\{([^{}]*)\}/img;
        private static var reg1:RegExp = /[*+\-\/]""[*+\-\/]/img;
        private static var reg2:RegExp = /[^*%+\-\(\)\/0-9]""[^*%+\-\(\)\/0-9]/;

        public function DescUtil()
        {
            return;
        }// end function

        public static function analyzeStr(param1:String, param2:Object) : String
        {
            var regHandler:Function;
            var str:* = param1;
            var obj:* = param2;
            regHandler = function () : String
            {
                var _loc_3:String = null;
                var _loc_5:String = null;
                var _loc_6:String = null;
                arguments = arguments[1];
                arguments = replaceByObjAttri(arguments, obj);
                var _loc_4:* = arguments.indexOf("!");
                if (_loc_4 > -1)
                {
                    _loc_5 = arguments.slice((_loc_4 + 1));
                    _loc_6 = arguments.slice(0, _loc_4);
                    return _loc_6.replace(new RegExp(_loc_5, "g"), "");
                }
                if (arguments.search(reg2) > -1)
                {
                    return arguments;
                }
                return Arithmetic.exec(arguments).toString();
            }// end function
            ;
            str = str.replace(reg, regHandler);
            return str;
        }// end function

        private static function replaceByObjAttri(param1:String, param2:Object) : String
        {
            var _loc_6:String = null;
            var _loc_7:String = null;
            var _loc_9:String = null;
            param1 = param1.replace(/ "" /g, "");
            var _loc_3:* = param1;
            var _loc_4:* = new Array();
            var _loc_5:int = 0;
            var _loc_8:int = 0;
            while (_loc_8 < param1.length)
            {
                
                _loc_9 = _loc_3.charAt(_loc_8);
                if (_loc_9 == "*" || _loc_9 == "/" || _loc_9 == "%" || _loc_9 == "-" || _loc_9 == "+" || _loc_9 == "(" || _loc_9 == ")" || _loc_9 == "!")
                {
                    _loc_7 = param1.substring(_loc_5, _loc_8);
                    _loc_6 = _loc_7;
                    _loc_5 = _loc_8 + 1;
                    if (_loc_7.length > 0 && !ValidatorUitl.isNumber(_loc_7))
                    {
                        _loc_7 = getAttriNoLine(_loc_7);
                        if (param2.hasOwnProperty(_loc_7))
                        {
                            _loc_3 = _loc_3.replace(new RegExp(_loc_6, "g"), param2[_loc_7].toString());
                        }
                    }
                }
                _loc_8++;
            }
            if (_loc_5 < (param1.length - 1))
            {
                _loc_7 = param1.substring(_loc_5);
                _loc_6 = _loc_7;
                _loc_5 = _loc_8 + 1;
                if (_loc_7.length > 0 && !ValidatorUitl.isNumber(_loc_7))
                {
                    _loc_7 = getAttriNoLine(_loc_7);
                    if (param2.hasOwnProperty(_loc_7))
                    {
                        _loc_3 = _loc_3.replace(new RegExp(_loc_6, "g"), param2[_loc_7].toString());
                    }
                }
            }
            return _loc_3;
        }// end function

        private static function getAttriNoLine(param1:String) : String
        {
            var _loc_3:String = null;
            var _loc_4:String = null;
            var _loc_5:String = null;
            var _loc_2:int = 0;
            while (_loc_2 < param1.length)
            {
                
                if (param1.charAt(_loc_2) == "_" && _loc_2 != (param1.length - 1))
                {
                    _loc_3 = param1.charAt((_loc_2 + 1));
                    _loc_4 = param1.substring(0, (_loc_2 + 1));
                    _loc_5 = param1.substring(_loc_2 + 2);
                    param1 = _loc_4 + _loc_3.toLocaleUpperCase() + _loc_5;
                }
                _loc_2++;
            }
            return param1.replace(/_""_/g, "");
        }// end function

    }
}
